package gdr.dev.creator;

import gdr.action.condizioni.*;
import gdr.action.descriptor.*;
import gdr.player.*;

import java.awt.Color;

public class ActionCreator {
	
	public static Move createMove(){
		Move a = new Move();
		UnlockCondition uc = new UnlockConditionDefault();
		a.setNome("Move");
		a.setIsUnlocked(uc);
		Bonus bonus = new Bonus();
		a.setBonusFisico(bonus);
		bonus = new Bonus();
		a.setBonusMagico(bonus);
		return a;
	}
	
	public static Attack createAttack(){
		Attack a = new Attack();
		UnlockCondition uc = new UnlockConditionDefault();
		a.setNome("Attack");
		a.setIsUnlocked(uc);
		Bonus bonus = new Bonus();
		a.setBonusMagico(bonus);
		bonus = new Bonus();
		bonus.setVal(Bonus.MISS, 1);
		bonus.setVal(Bonus.HIT, 2);
		bonus.setVal(Bonus.CRITICAL, 3);
		a.setBonusFisico(bonus);
		return a;
	}
	
	public static ActionMenu createActionMenu(String name){
		ActionMenu m = new ActionMenu();
		UnlockCondition uc = new UnlockConditionDefault();
		m.setNome(name);
		m.setIsUnlocked(uc);
		Bonus bonus = new Bonus();
		m.setBonusFisico(bonus);
		bonus = new Bonus();
		m.setBonusMagico(bonus);
		return m;
	}
	
	public static Magic createMagic(String nome, Magic.LivelloMagia livelloMagia, Color colore, int limite, int potenza){
		Magic aa = new Magic();
		UnlockCondition uc = new UnlockConditionLevelLimit(limite);
		aa.setNome(nome);
		aa.setIsUnlocked(uc);
		aa.setColore(colore);
		aa.setLivelloMagia(livelloMagia);
		aa.setPotenza(potenza);
		Bonus bonus = new Bonus();
		aa.setBonusFisico(bonus);
		int multiplier = 0;
		switch (livelloMagia){
		case BASE:
				multiplier = 2;
			break;
		case INTERMEDIO:
				multiplier = 4;
			break;
		case AVANZATO:
				multiplier = 6;
			break;
		default:
			break;
		}
		bonus = new Bonus();
		bonus.setVal(Bonus.MISS, multiplier * 1);
		bonus.setVal(Bonus.HIT, multiplier * 2);
		bonus.setVal(Bonus.CRITICAL, multiplier * 3);
		aa.setBonusMagico(bonus);
		return aa;
	}
	
	public static Heal createHealMagic(String nome, Magic.LivelloMagia livelloMagia, Color colore, int limite, int potenza){
		Heal aa = new Heal();
		UnlockCondition uc = new UnlockConditionLevelLimit(limite);
		aa.setNome(nome);
		aa.setIsUnlocked(uc);
		aa.setColore(colore);
		aa.setLivelloMagia(livelloMagia);
		aa.setPotenza(potenza);
		Bonus bonus = new Bonus();
		aa.setBonusFisico(bonus);
		int multiplier = 0;
		switch (livelloMagia){
		case BASE:
				multiplier = 2;
			break;
		case INTERMEDIO:
				multiplier = 4;
			break;
		case AVANZATO:
				multiplier = 6;
			break;
		default:
			break;
		}
		bonus = new Bonus();
		bonus.setVal(Bonus.MISS, multiplier * 1);
		bonus.setVal(Bonus.HIT, multiplier * 2);
		bonus.setVal(Bonus.CRITICAL, multiplier * 3);
		aa.setBonusMagico(bonus);
		return aa;
	}
	
	public static Summon createSummon(DefaultSummonedPlayer summon, int costoMP, int limit, int moltiplicatore){
		Summon s = new Summon();
		UnlockCondition uc =  new UnlockConditionLevelLimit(limit);
		s.setNome(summon.getName());
		s.setSummoned(summon);
		s.setIsUnlocked(uc);
		s.setCostoMP(costoMP);
		Bonus bonus = new Bonus();
		s.setBonusFisico(bonus);
		bonus = new Bonus();
		bonus.setVal(Bonus.MISS, moltiplicatore*1);
		bonus.setVal(Bonus.HIT, moltiplicatore*2);
		bonus.setVal(Bonus.CRITICAL, moltiplicatore*3);
		s.setBonusMagico(bonus);
		return s;
	}
}
